package br.unicamp.ic.inf300.arena.action.acesso;

import net.sourceforge.stripes.action.DefaultHandler;
import net.sourceforge.stripes.action.DontValidate;
import net.sourceforge.stripes.action.ForwardResolution;
import net.sourceforge.stripes.action.RedirectResolution;
import net.sourceforge.stripes.action.Resolution;
import net.sourceforge.stripes.validation.LocalizableError;
import net.sourceforge.stripes.validation.Validate;
import net.sourceforge.stripes.validation.ValidationError;
import br.unicamp.ic.inf300.arena.action.ArenaActionBean;
import br.unicamp.ic.inf300.arena.facade.FacadeFactory;
import br.unicamp.ic.inf300.arena.modelo.controleacesso.UsuarioSistema;
import br.unicamp.ic.inf300.arena.modelo.logistico.Evento;

public class AcessarActionBean extends ArenaActionBean {
	@Validate(required=true)
	private String usuario = null;

	@Validate(required=true)
	private String senha = null;

	private Integer codigo;

	private Evento evento;

	private String targetUrl;

	@DefaultHandler
	public Resolution acessar() {
		UsuarioSistema usuarioSistema = null;
		try {
			usuarioSistema = FacadeFactory.criarFacadeControleAcesso().validarLogon(usuario, senha);
		}
		catch (Exception e) {
			System.err.println("\n\n* => Erro controle de acesso: " + e.getMessage() );
		}

		if (usuarioSistema == null) {
            //MSG de erro a ser apresentada no JSP menu
			ValidationError error = new LocalizableError("usernameDoesNotExist");
            getContext().getValidationErrors().add("usuario", error);

            //no cenario de erro na autenticacao, retorna para pagina de entrada de dados (origem) da acao acessar
            return getContext().getSourcePageResolution();
		}
		else {
			getContext().setUsuarioSistema(usuarioSistema);
			return new RedirectResolution("/menu.jsp");
		}
	}

	/**
	 * popularEventoSelecionado()
	 * A partir do clique no link d'um evento em cartaz popula bean evento
	 * 
	 * @return Resolution => /vendaOnline.jsp
	 */
	@DontValidate
	public Resolution popularEventoSelecionado() {
		try {
			evento = FacadeFactory.criarFacadeEvento().obter(codigo);

			//ArenaActionBeanContext :: setEventoSelecionado(..) guarda em escopo
			//de sessao (HttpSession) o evento selecionado para ser exibido na pagina
			getContext().setEventoSelecionado(evento);
		}
		catch (Exception e) {
			e.printStackTrace();
		}
		return new ForwardResolution("/vendaOnline.jsp");
	}

	// -- getters & setters
	public String getUsuario() {
		return usuario;
	}
	public void setUsuario(String usuario) {
		this.usuario = usuario;
	}

	public String getSenha() {
		return senha;
	}
	public void setSenha(String senha) {
		this.senha = senha;
	}

	public Evento getEvento() {
		return evento;
	}
	public void setEvento(Evento evento) {
		this.evento = evento;
	}

	public Integer getCodigo() {
		return codigo;
	}
	public void setCodigo(Integer codigo) {
		this.codigo = codigo;
	}
	
    /** The URL the user was trying to access */
    public String getTargetUrl() { return targetUrl; }

    /** The URL the user was trying to access */
    public void setTargetUrl(String targetUrl) { this.targetUrl = targetUrl; }
}